package 链表;

import java.util.LinkedList;
import java.util.Queue;

/**
 * https://leetcode-cn.com/problems/remove-linked-list-elements/
 */
public class _203_移除链表元素 {


    public static void main(String[] args) {
        ListNode result = removeElements1(new ListNode(new ListNode(
                new ListNode(
                        new ListNode(
                                new ListNode(
                                        new ListNode(
                                                new ListNode(
                                                        new ListNode(
                                                                new ListNode(null, 6), 7), 6), 5), 4), 6), 3), 2), 1), 6);

//        ListNode result = removeElements1(new ListNode(new ListNode(
//                new ListNode(
//                        new ListNode(
//                                7), 7), 7), 7), 7);
        System.out.println(result);
    }

    //迭代
    public static ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return head;
        }


        head.next = removeElements(head.next, val);


        return head.val == val ? head.next : head;

    }

    //虚拟头结点
    public static ListNode removeElements1(ListNode head, int val) {
        if (head == null) {
            return head;
        }
        ListNode newNode = new ListNode(null, val - 1);
        newNode.next = head;
        ListNode firstNode = newNode;
        while (firstNode.next != null) {
            if (val == firstNode.next.val) {
                firstNode.next = firstNode.next.next;
            } else {
                firstNode = firstNode.next;
            }
        }

        return newNode.next;
    }
}
